// import { tt } from "../../../ttapi_interface/ttapi.js";
// import * as tt2 from "../../../ttapi_layer2/ttlayer2.js";
// import { GameScene } from "./gamescene.js";
// import { IRenderObj, ISceneObj } from "./sceneobj.js";
// import { Smoke } from "./smoke.js";


// export class SpriteRender implements IRenderObj {
//     sortvalue: number;

//     sprite: tt.Sprite;
//     pos: tt.Vector2;
//     rotate: number = 0;
//     color: tt.Color = tt.Color.White;
//     Render(batcher: tt.IBatcher): void {
//         let intpos = new tt.Vector2(this.pos.X - this.sprite.pixelwidth / 2, this.pos.Y - this.sprite.pixelheight / 2);
//         this.sprite.RenderWithRotate(batcher, intpos, tt.Vector2.One, this.rotate, this.sprite.pixelwidth / 2, this.sprite.pixelheight / 2, this.color);
//     }
// }
// export class ScenePlayer implements ISceneObj {
//     scene: GameScene;
//     pos: tt.Vector2 = new tt.Vector2(0, 0);
//     private dirwant: tt.Vector2 = new tt.Vector2(1, 0);
//     private dir: tt.Vector2 = new tt.Vector2(1, 0);//dir 需要线性插值
//     speedwant: number = 0;
//     speedVector: tt.Vector2 = new tt.Vector2(0, 0);//速度插值与限速
//     renderobjs: IRenderObj[] = []
//     smoke: Smoke = null;
//     spriterender: SpriteRender;
//     SetDirWant(dirwant:tt.Vector2):void
//     {
//         let r = ScenePlayer.Dir2ToRotate(this.dir);
//         let rw = ScenePlayer.Dir2ToRotate(dirwant);
//         while (Math.abs(rw - r) > Math.PI) {
//             if (r < rw)
//                 rw -= Math.PI * 2
//             else
//                 rw += Math.PI * 2;
//         }
//         {
//             //限制角速度
//             let degreespeed = 15; //每次最多改变15度
//             let rmax = degreespeed / 180 * Math.PI;
//             let radd = rw - r;
//             let rsign = Math.sign(radd);
//             radd = Math.abs(radd);
//             radd = Math.min(radd, rmax);
//             r = r + radd * rsign;
//         }
//         // r = rw * 0.1 + r * 0.9;
//         this.dirwant = ScenePlayer.Rotate2Dir(r);


//         // this.dirwant=dirwant;
//     }
//     CheckLimit(): boolean {
//         let l = this.scene._sceneLimit;
//         let cx = l.X + l.Width / 2;
//         let cy = l.Y + l.Height / 2;
//         let x2 = l.X + l.Width;
//         let y2 = l.Y + l.Height;
//         if (this.pos.X < l.X || this.pos.Y < l.Y || this.pos.X >= x2 || this.pos.Y >= y2) {
//             this.dirwant.X = cx - this.pos.X;
//             this.dirwant.Y = cy - this.pos.Y;
//             this.dirwant = tt.Vector2.Normal(this.dirwant);
//             return true;
//         }
//         return false;
//     }
//     static Dir2ToRotate(dir: tt.Vector2): number {
//         let upx = 0;
//         let upy = -1;
//         let len = Math.sqrt(dir.X * dir.X + dir.Y * dir.Y);
//         let px = dir.X / len;
//         let py = dir.Y / len;
//         let dot = px * upx + py * upy;
//         let rotate = Math.acos(dot);
//         if (px < 0)//左半球
//             rotate = Math.PI * 2 - rotate;
//         return rotate - Math.PI / 2;
//     }
//     static Rotate2Dir(rotate: number): tt.Vector2 {
//         let x = Math.cos(rotate);
//         let y = Math.sin(rotate);
//         return new tt.Vector2(x, y);
//     }
//     Update(delta: number): void {
//         this.CheckLimit();
//         let _speedWant_X = this.dir.X * this.speedwant;
//         let _speedWant_Y = this.dir.Y * this.speedwant;

//         let r = ScenePlayer.Dir2ToRotate(this.dir);
//         let rw = ScenePlayer.Dir2ToRotate(this.dirwant);
//         while (Math.abs(rw - r) > Math.PI) {
//             if (r < rw)
//                 rw -= Math.PI * 2
//             else
//                 rw += Math.PI * 2;
//         }
//         {
//             //限制角速度
//             let degreespeed = 240; //120度每秒
//             let rmax = degreespeed / 180 * Math.PI * delta;
//             let radd = rw - r;
//             let rsign = Math.sign(radd);
//             radd = Math.abs(radd);
//             radd = Math.min(radd, rmax);
//             r = r + radd * rsign;
//         }
//         // r = rw * 0.1 + r * 0.9;
//         this.dir = ScenePlayer.Rotate2Dir(r);

//         //r = ScenePlayer.Dir2ToRotate(this.dir);

//         this.speedVector.X = this.speedVector.X * 0.9 + _speedWant_X * 0.1;
//         this.speedVector.Y = this.speedVector.Y * 0.9 + _speedWant_Y * 0.1;

//         this.pos.X += this.speedVector.X * delta;
//         this.pos.Y += this.speedVector.Y * delta;

//         if (this.spriterender != null) {
//             this.spriterender.sortvalue = 101
//             this.spriterender.pos = this.pos;

//             this.spriterender.rotate = r;
//             if (this.renderobjs.includes(this.spriterender) == false) {
//                 this.renderobjs.push(this.spriterender);
//             }
//         }
//         if (this.smoke != null) {
//             this.smoke.pos = this.pos

//             this.smoke.Update(delta);
//             if (this.renderobjs.includes(this.smoke) == false) {
//                 this.renderobjs.push(this.smoke);
//             }
//         }

//     }
// }